package com.shujia.wyh.day14;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/*
    如何通过反射获取成员变量，并为成员变量进行赋值
 */
public class ClassDemo3 {
    public static void main(String[] args) throws Exception {
        //1、获取Class文件对象
        Class<?> studentClass = Class.forName("com.shujia.wyh.day14.Student");

        //2、通过反射获取构造方法
        Constructor<?> c1 = studentClass.getConstructor();

        //3、通过构造方法创建对象
        Object o = c1.newInstance();

        //4、通过反射获取成员变量
//        Field name = studentClass.getField("name"); //只能获取公共的成员变量
        Field name = studentClass.getDeclaredField("name"); //获取所有的成员变量
//        System.out.println(name);
        //void set(Object obj, Object value)
        //将指定对象参数上的此 Field对象表示的字段设置为指定的新值。
        //暴力访问
        name.setAccessible(true);
        name.set(o,"小虎");

        Field age = studentClass.getDeclaredField("age");
        age.setAccessible(true);
        age.set(o,18);

        Field address = studentClass.getDeclaredField("address");
        address.setAccessible(true);
        address.set(o,"安徽合肥");

        Field id = studentClass.getDeclaredField("id");
        id.setAccessible(true);
        id.set(o,1001);

        System.out.println(o);


    }
}
